#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>       // 提供了文件控制函数
#include <stdint.h>      // 提供了固定宽度整数类型
#include <sys/timerfd.h> //提供了创建和管理计时器的功能

int main()
{
    // int timerfd_create(int clockid, int flags);创建一个新的定时器文件描述符
    // clockid指定定时器使用的时钟，flags设置定时器行为
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0); // 使用单调递增的时间作为基准，不会因为系统调整时间而回退
    if (timerfd < 0)
    {
        perror("timerfd_create error");
        return -1;
    }
    // int timerfd_settime(int fd, int flags, struct itimerspec *new, struct itimerspec *old);
    // 设置定时器超时时间和重复间隔
    struct itimerspec itime;
    // 第一次超时时间
    itime.it_value.tv_sec = 1;
    itime.it_value.tv_nsec = 0;
    // 重复间隔
    itime.it_interval.tv_sec = 2;
    itime.it_interval.tv_nsec = 0;
    timerfd_settime(timerfd, 0, &itime, NULL); // nullptr表示不读取旧的定时器时间
    while (true)
    {
        uint64_t times; // 文件中数据为64位整数，表示定时器到期的次数
        int ret = read(timerfd, &times, 8);
        if (ret < 0)
        {
            perror("read error");
            return -1;
        }
        printf("超时了，距离上一次超时了%ld次\n", times);
    }
    close(timerfd);
    return 0;
}